#include "protocolo_NIPC.h"


int cargarEstructura(NIPC* paquete,int id,char*mensaje){

	uint16_t tamanio;
	paquete->payloadDescriptor = id;
  
  if(id!=0)
     paquete->payloadLength = 512 +sizeof(uint32_t);
  else
     paquete->payloadLength = strlen(mensaje);
  tamanio = paquete->payloadLength;
  paquete->mensaje = malloc(sizeof(char)*tamanio);
  memcpy(paquete->mensaje,mensaje,paquete->payloadLength);

	return 0;
}

/*______________________________________________________________________________________*/

int serializar_NIPC(NIPC paquete,char*buffer){


	memcpy(buffer,&paquete.payloadDescriptor,sizeof(uint8_t));

	memcpy(buffer + sizeof(uint8_t),&paquete.payloadLength,sizeof(uint16_t));

	memcpy(buffer + sizeof(uint8_t)+sizeof(uint16_t),paquete.mensaje,paquete.payloadLength);

	return 0;
}

/*______________________________________________________________________________________*/

int enviarNIPC(char*buffer,int tamanio,int socketNIPC){ //sirve para el handshake tambien

	int resultado;


	resultado = enviarDatos(buffer,tamanio,socketNIPC);

			if(resultado == 0){
				//printf("Envio Exitoso\n");
				return 0;
			}
			else{
				printf("Fallo el envio del Payload\n");
				return 1;
			}

		return 0;

	}

/*______________________________________________________________________________________*/

int recibirNIPC(char*buffer,int socketNIPC){

	int resultado;

	resultado = recibirDatos(buffer,socketNIPC);

			if(resultado == 0){
				//printf("Datos recibidos\n");
				return 0;
			}
			else{
				printf("Fallo la recepcion del payload\n");
				return 1;
			}

}

/*______________________________________________________________________________________*/
